package com.example.gmranqi.utils;



import com.example.gmranqi.common.enums.EnumInterface;

import java.util.HashMap;
import java.util.Map;

/**
 * @dec:
 * @author: 高总辉
 * @date: 2019-10-31
 */
public class EnumUtils {

	/**
	 * 获取枚举的map
	 *
	 * @param tClass
	 *            该类需要实现 enuminterface
	 * @param tClass
	 * @return interface
	 */
	public static Map<Integer, String> getMapByEnum(Class<? extends EnumInterface> tClass) {
		// 1.得到枚举类对象
		Map<Integer, String> typeMap = new HashMap<>();
		if (tClass == null)
			return typeMap;

		// 2.得到所有枚举常量
		EnumInterface[] enumInterfaces = tClass.getEnumConstants();
		if (enumInterfaces == null || enumInterfaces.length == 0)
			return typeMap;

		for (EnumInterface enumInterface : enumInterfaces) {
			typeMap.put(enumInterface.getCode(), enumInterface.getDesc());
		}

		return typeMap;
	}

	/**
	 * 获取枚举map string类型key
	 * 
	 * @param tClass
	 *            枚举类
	 * @param tClass
	 * @return map
	 */
	public static Map<String, String> getStringMapByEnum(Class<? extends EnumInterface> tClass) {
		// 1.得到枚举类对象
		Map<String, String> typeMap = new HashMap<>();
		if (tClass == null)
			return typeMap;

		// 2.得到所有枚举常量
		EnumInterface[] enumInterfaces = tClass.getEnumConstants();
		if (enumInterfaces == null || enumInterfaces.length == 0)
			return typeMap;

		for (EnumInterface enumInterface : enumInterfaces) {
			typeMap.put(String.valueOf(enumInterface.getCode()), enumInterface.getDesc());
		}

		return typeMap;
	}

	public static <T extends EnumInterface> T getByCode(Class<T> tClass, int code) {
		if (tClass == null)
			return null;

		// 2.得到所有枚举常量
		T[] enumInterfaces = tClass.getEnumConstants();
		if (enumInterfaces == null || enumInterfaces.length == 0)
			return null;

		for (T enumInterface : enumInterfaces) {
			Integer ecode = enumInterface.getCode();
			if (ecode == code) {
				return enumInterface;
			}
		}

		return null;
	}
}
